#ifndef _DOT_SORT_LEVEL_HPP_
#define _DOT_SORT_LEVEL_HPP_

#include <cstdint>
#include <vector>

#include <DotSort/Tube.hpp>

class LevelLoader;

class Level
{
	friend class LevelLoader;

	private:
		std::vector<Tube> tubes;

	public:
		const uint8_t tubeSize;
		const uint8_t tubeCount;

		Level(uint8_t tubeSize, uint8_t tubeCount);

		bool isPossibleStep(uint8_t t1, uint8_t t2) const;
		void doStep(uint8_t t1, uint8_t t2);

		bool isWin() const;

		const Tube& operator[](uint8_t index) const;
};

#endif
